package server;

import java.rmi.RemoteException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashSet;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Date;

import client.*;
/**
 * 
 * @author Jeroen Tietema
 *
 */
public class CijferlijstImpl implements Cijferlijst {
	private static HashSet<MyObserver> observers = new HashSet<MyObserver>();
	private DatabaseImpl db;

	public CijferlijstImpl() {
		db = new DatabaseImpl();
	}

	public void delete(String naam) throws RemoteException {
		System.out.println("CijferlijstImpl - Verwijderd naam :" + naam);
		db.executeQuery("DELETE FROM cijfers WHERE naam = '" + naam + "'");
		notifyObservers();
	}

	public String getTableName() throws RemoteException {
		return "cijfers";
	}

	public void insert(String naam, String cijfer) throws RemoteException {
		System.out.println("CijferlijstImpl - Invoegen: " + naam + " "
				+ cijfer);
		db.executeQuery("INSERT INTO cijfers (naam, cijfer) VALUES ('" + naam
				+ "', '" + cijfer + "')");
		notifyObservers();
	}

	public String[] select(String naam) throws RemoteException {
		System.out.println("cijferlijstImpl.select(" + naam + ");");
		ResultSet rs = db
				.executeQuery("SELECT naam, cijfer FROM cijfers WHERE naam = '"
						+ naam + "'");
		String[] rij = new String[2];
		try {
			rs.next();
			rij[0] = rs.getString("naam");
			rij[1] = rs.getString("cijfer");
		} catch (SQLException sqle) {
		}
		return rij;
	}

	public ArrayList<String[]> selectAll() throws RemoteException {
		System.out.println("CijferlijstImpl.selectAll();");
		ResultSet rs = db.executeQuery("SELECT naam, cijfer FROM cijfers");
		ArrayList<String[]> list = new ArrayList<String[]>();
		try {
			while (!rs.isAfterLast()) {
				rs.next();
				String[] rij = new String[2];
				rij[0] = rs.getString("naam");
				rij[1] = rs.getString("cijfer");
				list.add(rij);
			}
		} catch (SQLException sqle) {
		}
		return list;
	}

	public void update(String naam, String nieuwNaam, String cijfer) throws RemoteException {
		System.out.println("CijferlijstImpl.update(" + naam + ", " + nieuwNaam + ", " + cijfer + ");");
		db.executeQuery("UPDATE cijfers SET `naam` = '" + nieuwNaam + "'," +
				" `cijfer` ='" + cijfer + "' WHERE naam = '" + naam + "'");
		notifyObservers();
	}

	public void addMyObserver(MyObserver myObserver) throws RemoteException {
		System.out.println("cijferlijstImpl.addMyObserver();");
		observers.add(myObserver);
	}

	public void deleteMyObserver(MyObserver myObserver) throws RemoteException {
		System.out.println("cijferlijstImpl.deleteMyObserver();");
		observers.remove(myObserver);
	}
	private void notifyObservers(){
		System.out.println("Cijferlijst.notifyObservers()");
		for (Iterator<MyObserver> i = observers.iterator(); i.hasNext();){
			MyObserver observer = i.next();
			try{
				observer.update(""+new Date());
			}catch (RemoteException re){
				System.out.println("Cijferlijst.notifyObeservers() - Exception");
				re.printStackTrace();
			}
		}
	}

}
